/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package Janela;

import Dao.CidadesDAO;
import Dao.DetetiveDAO;
import Dao.LocaisVisitadosDAO;
import Modelo.Caso;
import Modelo.Cidades;
import Modelo.LocaisVisitados;
import Modelo.Mandato;
import UTIL.ManipularImagem;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Random;
import javax.swing.JDesktopPane;
import javax.swing.JOptionPane;

/**
 *
 * @author Hiago
 */
public class JogoGUI extends javax.swing.JInternalFrame {

    /**
     * Creates new form JogoGUI
     */
    public Caso caso;
    private Cidades cidade;
    private Cidades proxima;
    private List<Cidades> cidadesbotoes;
    private List<LocaisVisitados> locaisbotoes;
    private JDesktopPane desktop;
    private boolean perdido = false;
    private Integer posicaoCidade = 0;

    public JogoGUI(JDesktopPane desktop) {
        initComponents();
        this.desktop = desktop;
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jPanel1 = new javax.swing.JPanel();
        btnCidade1 = new javax.swing.JButton();
        btnCidade2 = new javax.swing.JButton();
        btnCidade3 = new javax.swing.JButton();
        jPanel2 = new javax.swing.JPanel();
        btnLocal2 = new javax.swing.JButton();
        btnLocal1 = new javax.swing.JButton();
        btnLocal3 = new javax.swing.JButton();
        jPanel3 = new javax.swing.JPanel();
        lblNomedaCidade = new javax.swing.JLabel();
        jPanel4 = new javax.swing.JPanel();
        lblImagem = new javax.swing.JLabel();
        jPanel5 = new javax.swing.JPanel();
        lblDescricao = new javax.swing.JLabel();

        setMaximizable(true);
        setMaximumSize(new java.awt.Dimension(4009, 3000));
        addInternalFrameListener(new javax.swing.event.InternalFrameListener() {
            public void internalFrameActivated(javax.swing.event.InternalFrameEvent evt) {
            }
            public void internalFrameClosed(javax.swing.event.InternalFrameEvent evt) {
            }
            public void internalFrameClosing(javax.swing.event.InternalFrameEvent evt) {
            }
            public void internalFrameDeactivated(javax.swing.event.InternalFrameEvent evt) {
            }
            public void internalFrameDeiconified(javax.swing.event.InternalFrameEvent evt) {
            }
            public void internalFrameIconified(javax.swing.event.InternalFrameEvent evt) {
            }
            public void internalFrameOpened(javax.swing.event.InternalFrameEvent evt) {
                formInternalFrameOpened(evt);
            }
        });

        jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("Cidades"));

        btnCidade1.setText("Cidade 1");
        btnCidade1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnCidade1ActionPerformed(evt);
            }
        });

        btnCidade2.setText("Cidade 2");
        btnCidade2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnCidade2ActionPerformed(evt);
            }
        });

        btnCidade3.setText("Cidade 3");
        btnCidade3.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnCidade3ActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addGap(8, 8, 8)
                .addComponent(btnCidade1, javax.swing.GroupLayout.PREFERRED_SIZE, 112, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addComponent(btnCidade2, javax.swing.GroupLayout.PREFERRED_SIZE, 112, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addComponent(btnCidade3, javax.swing.GroupLayout.PREFERRED_SIZE, 112, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(0, 11, Short.MAX_VALUE))
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(btnCidade1, javax.swing.GroupLayout.PREFERRED_SIZE, 52, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(btnCidade2, javax.swing.GroupLayout.PREFERRED_SIZE, 52, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(btnCidade3, javax.swing.GroupLayout.PREFERRED_SIZE, 52, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap())
        );

        jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder("Locais"));

        btnLocal2.setText("Local 2");
        btnLocal2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnLocal2ActionPerformed(evt);
            }
        });

        btnLocal1.setText("Local 1");
        btnLocal1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnLocal1ActionPerformed(evt);
            }
        });

        btnLocal3.setText("Local 3");
        btnLocal3.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnLocal3ActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
        jPanel2.setLayout(jPanel2Layout);
        jPanel2Layout.setHorizontalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel2Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(btnLocal1, javax.swing.GroupLayout.PREFERRED_SIZE, 112, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addComponent(btnLocal2, javax.swing.GroupLayout.PREFERRED_SIZE, 112, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addComponent(btnLocal3, javax.swing.GroupLayout.PREFERRED_SIZE, 112, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        jPanel2Layout.setVerticalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup()
                .addGap(25, 25, 25)
                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(btnLocal2, javax.swing.GroupLayout.PREFERRED_SIZE, 52, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(btnLocal1, javax.swing.GroupLayout.PREFERRED_SIZE, 52, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(btnLocal3, javax.swing.GroupLayout.PREFERRED_SIZE, 52, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap())
        );

        lblNomedaCidade.setFont(new java.awt.Font("Trajan Pro", 1, 24)); // NOI18N
        lblNomedaCidade.setText("Nome da Cidade");

        jPanel4.setBorder(javax.swing.BorderFactory.createTitledBorder("Imagem"));

        javax.swing.GroupLayout jPanel4Layout = new javax.swing.GroupLayout(jPanel4);
        jPanel4.setLayout(jPanel4Layout);
        jPanel4Layout.setHorizontalGroup(
            jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(lblImagem, javax.swing.GroupLayout.DEFAULT_SIZE, 238, Short.MAX_VALUE)
        );
        jPanel4Layout.setVerticalGroup(
            jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(lblImagem, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        );

        jPanel5.setBorder(javax.swing.BorderFactory.createTitledBorder("Descricao"));

        javax.swing.GroupLayout jPanel5Layout = new javax.swing.GroupLayout(jPanel5);
        jPanel5.setLayout(jPanel5Layout);
        jPanel5Layout.setHorizontalGroup(
            jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel5Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(lblDescricao, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addContainerGap())
        );
        jPanel5Layout.setVerticalGroup(
            jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(lblDescricao, javax.swing.GroupLayout.DEFAULT_SIZE, 193, Short.MAX_VALUE)
        );

        javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3);
        jPanel3.setLayout(jPanel3Layout);
        jPanel3Layout.setHorizontalGroup(
            jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel3Layout.createSequentialGroup()
                .addGap(20, 20, 20)
                .addComponent(jPanel4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jPanel5, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addContainerGap())
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel3Layout.createSequentialGroup()
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addComponent(lblNomedaCidade, javax.swing.GroupLayout.PREFERRED_SIZE, 373, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(146, 146, 146))
        );
        jPanel3Layout.setVerticalGroup(
            jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel3Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(lblNomedaCidade, javax.swing.GroupLayout.PREFERRED_SIZE, 56, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(26, 26, 26)
                .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jPanel4, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(jPanel5, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addContainerGap())
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(16, 16, 16))
            .addComponent(jPanel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addComponent(jPanel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addContainerGap())
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void formInternalFrameOpened(javax.swing.event.InternalFrameEvent evt) {//GEN-FIRST:event_formInternalFrameOpened
        montaTela();
    }//GEN-LAST:event_formInternalFrameOpened

    private void btnCidade1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCidade1ActionPerformed
        caso.setPassos(caso.getPassos()+3);
        cidade = cidadesbotoes.get(0);
        //incrementa em TRÊS os passos
        caso.setPassos(caso.getPassos() + 3);
        //pula pra próxima cidade

        //Testa se a cidade que  vai é a certa
        if (cidade.getNomecidade().equals(proxima.getNomecidade())) {
            perdido = false;
            if (posicaoCidade < caso.getCidades().size() - 1) {
                posicaoCidade++; //foi pra próxima cidade
            }
        } else {
            perdido = true;
        }
        montaTela();

    }//GEN-LAST:event_btnCidade1ActionPerformed

    private void btnLocal1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnLocal1ActionPerformed
        logicaLocal(0);
    }//GEN-LAST:event_btnLocal1ActionPerformed

    private void btnCidade2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCidade2ActionPerformed
        caso.setPassos(caso.getPassos()+3);
        cidade = cidadesbotoes.get(1);
        //incrementa em TRÊS os passos
        caso.setPassos(caso.getPassos() + 3);
        //pula pra próxima cidade

        //Testa se a cidade que  vai é a certa
        if (cidade.getNomecidade().equals(proxima.getNomecidade())) {
            perdido = false;
            if (posicaoCidade < caso.getCidades().size() - 1) {
                posicaoCidade++; //foi pra próxima cidade
            }
        } else {
            perdido = true;
        }
        montaTela();

    }//GEN-LAST:event_btnCidade2ActionPerformed

    private void btnCidade3ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCidade3ActionPerformed
        caso.setPassos(caso.getPassos()+3);
        cidade = cidadesbotoes.get(2);
        //incrementa em TRÊS os passos
        caso.setPassos(caso.getPassos() + 3);
        //pula pra próxima cidade

        //Testa se a cidade que  vai é a certa
        if (cidade.getNomecidade().equals(proxima.getNomecidade())) {
            perdido = false;
            if (posicaoCidade < caso.getCidades().size() - 1) {
                posicaoCidade++; //foi pra próxima cidade
            }
        } else {
            perdido = true;
        }
        montaTela();

    }//GEN-LAST:event_btnCidade3ActionPerformed

    private void btnLocal2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnLocal2ActionPerformed
         logicaLocal(1);
    }//GEN-LAST:event_btnLocal2ActionPerformed

    private void btnLocal3ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnLocal3ActionPerformed
         logicaLocal(2);
    }//GEN-LAST:event_btnLocal3ActionPerformed

    private void logicaLocal(int numeroBotao){
        //Faz o IF//
        
        if(caso.getCidades().get(2).getDescricao().equals(cidade.getDescricao())){
                //se não tem o mandato ou suspeito errado
            dialogFim fim = new dialogFim(null, true, this.desktop);
            if(Mandato.getMandatoemitido()== false){
                fim.prendeu = false;
                fim.caso = this.caso;
                fim.setVisible(true);
                }
            else{
                if(Mandato.getSuspeito().getNomesuspeito().equals(caso.getSuspeito().getNomesuspeito())){
                //atualizar os casos resolvidos e depois mensagem de ok
                fim.prendeu = true;
                fim.caso = this.caso;
                fim.setVisible(true); 
                caso.getDetetive().setNcasos( caso.getDetetive().getNcasos()+1);
                DetetiveDAO dao = new DetetiveDAO();
                dao.Atualizar(caso.getDetetive());
                }
            
            else{
                fim.prendeu = false;
                fim.caso = this.caso;
                fim.setVisible(true);
                    }
            }
            }
        else {
           
        caso.setPassos(caso.getPassos()+1);
        
        if(caso.getPassos() == 15){
            JOptionPane.showMessageDialog(this, "GAME OVER");
        }
        else{
            
        
        dialogLocal dialog = new dialogLocal(null, closable);
        
        dialog.local = locaisbotoes.get(numeroBotao);
        String dica;
        dica = "<html>";
        if(perdido == false) {
            Random gerador = new Random();
            String dicaTexto;
            int dica1 = gerador.nextInt(3);
            switch(dica1)
            {
                case 0:
                    dicaTexto = proxima.getDica1();
                    break;
                
                case 1:
                    dicaTexto = proxima.getDica2();
                    break;
                    
                case 2:
                    dicaTexto = proxima.getDica3();
                    break;
                    
                default:
                    dicaTexto = proxima.getDica1();
                    break;
            }
            
            String dicasuspeito;
            List<String> listadicas = new ArrayList<String>();
            listadicas.add("comentou sobre " +caso.getSuspeito().getOcupacao());
            listadicas.add("comentou sobre " +caso.getSuspeito().getOutros());
            listadicas.add("tinha cabelo " +caso.getSuspeito().getCabelo());
            listadicas.add("dirigia um(a) " +caso.getSuspeito().getCarro());
            listadicas.add("seu sexo era " +caso.getSuspeito().getSexo());
            listadicas.add("disse que praticava " +caso.getSuspeito().getEsporte());
            listadicas.add("era " +caso.getSuspeito().getTracos());
            
            Collections.shuffle(listadicas);
            dica += "Olá, ele me perguntou sobre o(a) " + dicaTexto + ". <br>Ele "
                     + listadicas.get(0);
        } else {
            dica += "Que estranho!<br> Não vi ninguém por aqui.";
        }
        dica += "</html>";
        dialog.dica = dica;
        dialog.setVisible(true);     
        }
        }
        
    }
    
    private void montaTela() {
        if (perdido == false) {
            cidade = caso.getCidades().get(posicaoCidade);
        }
        lblNomedaCidade.setText(cidade.getNomecidade());
        lblDescricao.setText("<html>" + cidade.getDescricao() + "</html>");
        ManipularImagem.exibiImagemLabel(cidade.getImagem(), lblImagem);

        CidadesDAO dao = new CidadesDAO();
        if (posicaoCidade < caso.getCidades().size() - 1) {
            this.proxima = caso.getCidades().get(posicaoCidade + 1);
        }
        this.cidadesbotoes = dao.ListarTres(proxima, cidade);

        btnCidade1.setText(cidadesbotoes.get(0).getNomecidade());
        btnCidade2.setText(cidadesbotoes.get(1).getNomecidade());
        btnCidade3.setText(cidadesbotoes.get(2).getNomecidade());

        LocaisVisitadosDAO dao2 = new LocaisVisitadosDAO();
        locaisbotoes = dao2.ListarTres();

        btnLocal1.setText(locaisbotoes.get(0).getNomelocal());
        btnLocal2.setText(locaisbotoes.get(1).getNomelocal());
        btnLocal3.setText(locaisbotoes.get(2).getNomelocal());
    }
    
    private boolean verificaFinal(){
        boolean acabou = false;
        if (caso.getPassos() > 15){
             dialogFim fim  = new dialogFim(null, true, this.desktop);
             fim.caso = caso;
             fim.prendeu = false;  
             acabou = true;
        } else {
            if (posicaoCidade == caso.getCidades().size()-1) {
                dialogFim fim = new dialogFim(null, true, this.desktop);
                fim.caso = caso;
                fim.prendeu = true;
                acabou = true;
            }
        }
        return acabou;
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnCidade1;
    private javax.swing.JButton btnCidade2;
    private javax.swing.JButton btnCidade3;
    private javax.swing.JButton btnLocal1;
    private javax.swing.JButton btnLocal2;
    private javax.swing.JButton btnLocal3;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JPanel jPanel3;
    private javax.swing.JPanel jPanel4;
    private javax.swing.JPanel jPanel5;
    private javax.swing.JLabel lblDescricao;
    private javax.swing.JLabel lblImagem;
    private javax.swing.JLabel lblNomedaCidade;
    // End of variables declaration//GEN-END:variables
}
